#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include "parser.h"

/*!
    Parseamos la linea de comandos. La funcion la llama bfsNet y es aca
    donde nos encargamos de crear el correspondiente network. Si scanf
    no lee los 3 enteros como deberian paserle entonces se corta la
    lectura y se devuelve el network
*/

network command_in(void){
    unsigned int node_from, node_to, cap, i;
    network nw = NULL;
    nw = network_create();
    while(true){
        i = scanf("%d %d %d", &node_from, &node_to, &cap);
        if (i == 3){
            network_add(nw, node_from, node_to, cap, INIT_FLOW);
        }
        else{
            break;
        }
    }
    return nw;
}

/*!
    Función que imprime en la pantalla los resultados. La función toma
    un arreglo que contiene el tamaño en la posicion 0 y el flujo en
    la posición 1. Los demas lugares son el correspondiente camino que
    debemos imprimir.
*/

void command_out(network n, bool get_flow, bool get_cut, bool get_aux){
    FILE *f = NULL;
    int c = 0;
    unsigned int max_flow = 0;
    
    /* Si me piden imprimir los caminos auxiliares*/
    if(get_aux){
        
        /* Abro el archivo y lo imprimo*/
        f = fopen("aux.txt","r");
        while ((c = getc(f)) != EOF)
            putchar(c);
        fclose(f);
        remove("aux.txt");

    }
    
    /* Si me piden imprimir el flujo*/
    if(get_flow){
        
        /* Abro el archivo y lo imprimo*/
        f = fopen("flow.txt","r");
        while ((c = getc(f)) != EOF)
            putchar(c);
        fclose(f);
        remove("flow.txt");

    }
    
    /* Calculo el flujo maximal y lo imprimo*/
    max_flow = network_max_flow_calculate(n);
    printf("Valor del Flujo : %d\n",max_flow);
    
    /* Si me piden imprimir el corte*/
    if (get_cut){
        
        /* Abro el archivo y lo imprimo*/
        f = fopen("cut.txt","r");
        while ((c = getc(f)) != EOF)
            putchar(c);
        fclose(f);
        remove("cut.txt");
    }
}
